package br.com.financas.daos;

import br.com.financas.beans.Categoria;
import br.com.financas.beans.Pessoa;
import br.com.financas.beans.TipoMovimentacao;
import br.com.financas.util.HibernateUtil;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
/**
 *
 * @author Denis
 */
public class CategoriaDao {
   Session sessao;
   Transaction trans; 
   List<Categoria>list;
   
   public void addCategoria(Categoria c,TipoMovimentacao t,Pessoa p){
       try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans=sessao.beginTransaction();
            
            Categoria categoria = new Categoria();
            TipoMovimentacao tipo = new TipoMovimentacao();
            Pessoa pessoa = new Pessoa();
            
            tipo.setIdTipoMovimentacao(t.getIdTipoMovimentacao());
            pessoa.setIdPessoa(p.getIdPessoa());
            
            categoria.setNome(c.getNome());
            categoria.setIdTipoMovimentacao(tipo);
            categoria.setIdPessoa(pessoa);
            
            sessao.save(categoria);
            trans.commit();
                    
       } catch (Exception e) {
           e.printStackTrace();
       }finally{
           
       }
   }
    public void deletarCategoria(Categoria c){
        try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans=sessao.beginTransaction();
            sessao.delete(c);
            trans.commit();
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            sessao.close();
        }
    }
    public void updateCategoria(Categoria c,TipoMovimentacao t){
        try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans=sessao.beginTransaction();
            
            c.setIdTipoMovimentacao(t);
            
            sessao.update(c);
            trans.commit();
        } catch (Exception e){
            e.printStackTrace();
        }finally{
            sessao.close();
        }
    }
    public List<Categoria> listarCategoria(Pessoa pessoa){
        sessao = HibernateUtil.getSessionFactory().openSession();
        trans=sessao.beginTransaction();
        Criteria cri = sessao.createCriteria(Categoria.class);
        cri.createCriteria("idPessoa").add(Restrictions.eq("id",pessoa.getIdPessoa()));
        this.list = cri.list();
        sessao.close();
        return list;
    }
    public List<Categoria> getListCategoria(Pessoa pessoa){  
        sessao = HibernateUtil.getSessionFactory().openSession();
        trans=sessao.beginTransaction();
        Criteria cri = sessao.createCriteria(Categoria.class);
        cri.createCriteria("idPessoa").add(Restrictions.eq("id",pessoa.getIdPessoa()));
        cri.addOrder(Order.asc("nome"));
        this.list = cri.list();
        sessao.close();
        return list;
    }
}
